/**  
* @description
* @author  wangshiwei  
* @date   2018年6月22日    
*/  
package com.oren.config;

import java.lang.reflect.Field;
import java.util.Map;

import com.oren.annotation.WswInject;
import com.oren.util.ArrayUtil;
import com.oren.util.ReflectionUtil;

/**  
* @description 依赖注入
* @author  wangshiwei  
* @date   2018年6月22日 下午1:40:59
    
*/
public final class IocHelper {
	
	static {
		//获取所有的Bean类和Bean实例之间的隐射关系
		Map<Class<?>,Object> beanMap=BeanHelper.getBeanMap();
		if(beanMap!=null) {
			for (Map.Entry<Class<?>,Object> beanEntry:beanMap.entrySet()) {
				Class<?> beanClass=beanEntry.getKey();
				Object beanInstance=beanEntry.getValue();
				//获取该类的所有成员变量
				Field[] beanFields=beanClass.getDeclaredFields();
				if(!ArrayUtil.isNotEmpty(beanFields)) {
					for (Field field : beanFields) {
						//判断是否存在依赖注入的注解
						if(field.isAnnotationPresent(WswInject.class)) {
							//在bean map中获取Bean Field 对应的实例
							Class<?> beanFieldClass=field.getType()	;
							/*Object beanFieldInstance1= null;
							for (Map.Entry<Class<?>,Object> classObjectEntry:beanMap.entrySet()) {
								//获取子类对象
								Class<?> child=classObjectEntry.getKey();
								//判断子类和父类的关系
								if(beanFieldClass.isAssignableFrom(child)&&!beanFieldClass.equals(child)){
									beanFieldInstance1=child;
								}
							}*/
							Object beanFieldInstance=beanMap.get(beanFieldClass);
							if(beanFieldInstance!=null) {
								//通过反射初始化BeanField的值
								ReflectionUtil.setField(beanInstance, field, beanFieldInstance);
							}


						}
					}
				}
			}
		}
	}
}
